/*
 * @Descripttion: 写点什么
 * @version: 
 * @Author: Zhaocy
 * @Date: 2024-07-26 16:29:43
 * @LastEditors: Zhaocy
 * @LastEditTime: 2024-07-31 14:20:10
 */
package com.zhike.mapper.user;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhike.common.dto.UserRosterVO;
import com.zhike.common.dto.UserRegisterDTO;
import com.zhike.common.model.IMUser;
import com.zhike.common.vo.UserFriendCountVO;
import com.zhike.common.vo.UserIdVO;
import com.zhike.common.vo.UserInfo4Cache;
import com.zhike.common.vo.UserInfoVO;

public interface UsersMapper extends BaseMapper<IMUser> {
        /**
         * 查询用户头像全路径名
         * 
         * @param userId
         * @return
         */
        String selectUserAvatar(@Param("userId") String userId);

        /**
         * 查询用户
         * 
         * @param userId
         * @return
         */
        UserInfoVO getUserByUserId(@Param("fakeId") String fakeId);

        // 更新用户头像
        Integer updateUserAvatar(@Param("userId") String userId, @Param("fileName") String avatar);

        List<UserInfo4Cache> selectUserInfoCache(@Param("userId") String userId);

        /**
         * 查询用户信息
         * 
         * @param deviceNo 设备号
         * @return 结果
         */
        @Deprecated
        UserRosterVO queryUserInfo(@Param("deviceNo") String deviceNo, @Param("phone") String phone);

        /**
         * 查询好友详情
         * 
         * @return
         */
        UserRosterVO queryFriendUserInfo(@Param("searchText") String searchText);

        /**
         * 根据登录账号或者手机号，查询用户信息
         *
         * @param loginName 登录账号
         * @param psw       密码
         * @return 结果
         */
        UserIdVO selectUserForLogin(@Param("loginName") String loginName, @Param("psw") String psw);

        /**
         * 查询指定uid用户的邮件地址
         *
         * @param uid uid
         * @return mail
         */
        String queryUserMailByUid(@Param("uid") String uid);

        /**
         * 查询指定人员的好友数量情况
         *
         * @param uid uid
         * @return 结果
         */
        UserFriendCountVO queryUserFriendCount(@Param("uid") String uid);

        /**
         * 重置所有用户在线状态
         *
         * @return 结果
         */
        int updateOnlineStatusAll();

        /**
         * 修改在线状态
         *
         * @param isOnline  是否在线
         * @param isMail    是否邮箱
         * @param uidOrMail uid or mail
         * @return 结果
         */
        int updateOnlineStatus(@Param("isOnline") Boolean isOnline,
                        @Param("isMail") Boolean isMail,
                        @Param("uidOrMail") String uidOrMail,
                        @Param("osType") String osType);

        /**
         * 校验手机号是否存在
         *
         * @param phone 手机号
         * @return 结果
         */
        Integer checkPhone(@Param("phone") String phone);

        /**
         * 新增用户
         */
        int insertUser(@Param("urd") UserRegisterDTO urd,
                        @Param("registerIp") String ip,
                        @Param("userRegion") String userRegion);

        /**
         * 更新用户数据
         * 
         * @param nickName
         * @param sex
         * @param uid
         * @return
         */
        int updateUser(@Param("nickName") String nickName,
                        @Param("sex") String sex,
                        @Param("uid") String uid);

        /**
         * 根据uid查询密码
         *
         * @param uid yid
         * @return 密码
         */
        String getPasswordByUid(@Param("uid") String uid);

        /**
         * 修改密码
         *
         * @param oldPassword 旧密码
         * @param newPassword 新密码
         * @param uid         yid
         * @return 结果
         */
        int updatePassword(@Param("newPassword") String newPassword,
                        @Param("uid") String uid);

        /**
         * 更新最近登陆时间、最近登陆ip
         *
         * @param ip ip
         * @return 结果
         */
        int updateUserLoginInfo(@Param("ip") String ip, @Param("uid") String uid);

        /**
         * 用户个性签名信息修改接口
         *
         * @param sign 个性签名
         * @param uid  yid
         * @return 结果
         */
        int userUpdatePersonalSignature(@Param("sign") String sign, @Param("uid") String uid);

        /**
         * 用户其它说明修改接口
         *
         * @param userDesc 其他说明
         * @param uid      uid
         * @return 结果
         */
        int userUpdateOtherInfo(@Param("userDesc") String userDesc, @Param("uid") String uid);

        /**
         * 检测随机生成账号是否存在
         *
         * @param accountNumber 用户账号
         * @return 结果
         */
        Integer checkAccountNumber(@Param("accountNumber") String accountNumber);
}
